const {
  statusBarHeight
} = uni.getSystemInfoSync();
class NativeMsg {
  // 整个区域的宽高
  viewStyle = {
    backgroundColor: "rgba(255,255,255,0)",
    top: "0px",
    left: "0px",
    width: "100%",
    // 取图片的高度（带阴影的尺寸）
    height: `${uni.upx2px(239)}px`
  };
  constructor(item, cb) {
    // 记录内容信息，以供回调使用
    this.item = item;
    // 弹出、消失动画要用
    this.offsetTop = -statusBarHeight - uni.upx2px(159);
    // 上边界
    this.startTop = -statusBarHeight - uni.upx2px(159);
    // 下边界
    this.endTop = statusBarHeight;
    // 上滑关闭要用
    this.clientY = 0;
    // nativeObj.View 实例
    this.view = null;
    // 背景图片
    this.bgBitmap = null;
    // 回调函数
    this.cb = cb || null;
    // 隐藏过程flag，防止重复执行
    this.hiding = false;
    // 标记当前弹窗状态
    this.status = "active";
    this.create();
  }
  // 创建区域以及背景
  create() {
    this.loadBg().then(() => {
      let _view = null;
      // 创建 View区域
      _view = new plus.nativeObj.View(`alarmMsg-${this.item.alarmId || "ins"}`, this.viewStyle);
      // 画背景
      _view.drawBitmap(
        this.bitmap, {}, {
          width: this.viewStyle.width,
          height: this.viewStyle.height,
          left: 0,
          top: 0
        },
        "alarm-bg"
      );
      // 拦截触摸事件: 开启后 区域内的触摸事件不会透传到下面
      _view.interceptTouchEvent(true);
      // 增加点击事件监听
      _view.addEventListener("click", () => {
        if (this.hiding) return;
        this.hiding = true;
        this.cb && this.cb({
          type: "click",
          result: this.item
        });
        this.animationHide();
      });
      // 触摸事件监听
      _view.addEventListener("touchstart", res => {
        this.clientY = res.clientY;
      });
      // 触摸事件监听
      _view.addEventListener("touchmove", res => {
        const {
          clientY
        } = res;
        let offsetY = this.clientY - clientY;
        if (offsetY > 25 && !this.hiding) {
          this.hiding = true;
          this.cb && this.cb({
            type: "move",
            result: this.item
          });
          this.animationHide();
        }
      });
      // 保存
      this.view = _view;
      // 画内容
      this.drawInfo();
      // 显示
      this.animationShow();
       this.tips()
       setTimeout(() => {
         this.animationHide();
       }, 2000);
    });
  }
  // 加载背景图片
  loadBg() {
    // 创建Bitmap图片
    this.bitmap = new plus.nativeObj.Bitmap("nativeMsg-bg");
    // 以Promise方式封装 图片加载过程
    return new Promise((resolve, reject) => {
      // 加载图片, 路径需要注意
      this.bitmap.load(
        "_www/static/alarm-bg.png",
        () => {
          resolve();
        },
        error => {
          console.log(" ====> error", error);
          reject();
        }
      );
    });
  }
  // 画内容
  drawInfo() {
    const {
      warningTypeStr,
      projectName,
      description,
      messageImage
    } = this.item;
    this.view.draw([{
        tag: "font",
        id: "mainFont",
        text: warningTypeStr,
        textStyles: {
          size: `${uni.upx2px(36)}px`,
          color: "#262626",
          weight: "bold",
          align: "left"
        },
        position: {
          top: `${uni.upx2px(60)}px`,
          left: `${uni.upx2px(170)}px`,
          height: "wrap_content"
        }
      },
      {
        tag: "font",
        id: "projectFont",
        text: projectName,
        textStyles: {
          size: `${uni.upx2px(24)}px`,
          color: "#7B7B7B",
          align: "right",
          overflow: "ellipsis"
        },
        position: {
          top: `${uni.upx2px(60)}px`,
          left: `50%`,
          width: `${uni.upx2px(750 / 2 - 40 - 20)}px`,
          height: "wrap_content"
        }
      },
      {
        tag: "font",
        id: "infoFont",
        text: description,
        textStyles: {
          size: `${uni.upx2px(28)}px`,
          color: "#7B7B7B",
          align: "left",
          overflow: "ellipsis"
        },
        position: {
          top: `${uni.upx2px(117)}px`,
          left: `${uni.upx2px(170)}px`,
          width: `${uni.upx2px(670 - 40 - 10)}px`,
          height: "wrap_content"
        }
      },
      {
        src: '/static/logo.png',
        id: 'image',
        tag: 'img',
         overflow: "ellipsis",
          align: "left",
          textStyles: {
            size: `${uni.upx2px(56)}px`,
            color: "#7B7B7B",
            align: "left",
            overflow: "ellipsis"
          },
        position: {
          top: `${uni.upx2px(60)}px`,
          left: `${uni.upx2px(60)}px`,
          width: `${uni.upx2px(80)}px`,
          height: `${uni.upx2px(80)}px`
        }
      },
    ]);
  }
  // 简易向下出现动画
  animationShow() {
    this.view.show();
    this.view.setStyle({
      ...this.viewStyle,
      top: `${this.offsetTop++}px`
    });
    if (this.offsetTop >= this.endTop) {
      this.status = "active";
      return;
    }
    setTimeout(() => {
      this.animationShow();
    }, 0);
  }
  // 简易向上消失动画
  animationHide() { 
    this.view.setStyle({
      ...this.viewStyle,
      top: `${this.offsetTop--}px`
    });
    if (this.offsetTop <= this.startTop) {
      this.view.close();
      this.hiding = false;
      this.status = "close";
      return;
    }
    setTimeout(() => {
      this.animationHide();
    }, 0);
  }
  // 获取当前状态
  getStatus() { 
    return this.status;
  }
  // 不用动画，直接消失
  hide() {
    this.view.hide();
    this.view.close();
  }
  // 调用系统提示音和振动
  tips() {
   
  	if(true) {
  		let system = uni.getSystemInfoSync().platform
  		if(system == 'ios') {
  			let player = plus.audio.createPlayer( "/static/audio/ios.mp3" );
  			player.play()
  		} else {
  			let main = plus.android.runtimeMainActivity();
  			let RingtoneManager = plus.android.importClass("android.media.RingtoneManager");
  			let uri = RingtoneManager.getActualDefaultRingtoneUri(main, RingtoneManager.TYPE_NOTIFICATION);
  			let MediaPlayer = plus.android.importClass("android.media.MediaPlayer");  
  			let player = MediaPlayer.create(main, uri);  
  			player.setLooping(false);  
  			player.prepare();  
  			player.start();
  		}
  	}
  	// if(this.vibration) {
  	// 	plus.device.vibrate()
  	// }
  }
}

// 对外暴露一个创建实例的方法
export function createAlarm(item, cb) {
  return new NativeMsg(item, cb);
}